/**
 * AI服务类型定义
 */

/**
 * AI角色管理错误接口
 */
export interface AIRoleError {
  code: string
  message: string
  details?: any
}

/**
 * AI角色操作结果类型
 */
export type AIRoleResult<T> = {
  ok: true
  data: T
} | {
  ok: false
  error: AIRoleError
}

/**
 * OpenAI客户端配置
 */
export interface OpenAIClientConfig {
  apiKey: string
  baseURL?: string              // 支持自定义API端点
  model?: string                // 默认 'gpt-3.5-turbo'
  timeout?: number              // 默认 30000ms
  maxRetries?: number           // 默认 3
}

/**
 * AI补全请求
 */
export interface AICompletionRequest {
  prompt: string                // 用户输入的上下文
  maxTokens?: number           // 最大生成token数，默认500
  temperature?: number         // 创造性参数，默认0.7
  stream?: boolean             // 是否流式输出，默认true
}

/**
 * AI补全响应
 */
export interface AICompletionResponse {
  content: string              // 生成的文本
  usage?: {
    promptTokens: number
    completionTokens: number
    totalTokens: number
  }
}

/**
 * AI结果类型（判别联合）
 */
export type AIResult<T> = {
  ok: true
  data: T
} | {
  ok: false
  error: AIError
}

/**
 * AI错误码枚举
 */
export enum AIErrorCode {
  API_KEY_MISSING = 'api_key_missing',
  API_KEY_INVALID = 'api_key_invalid',
  NETWORK_ERROR = 'network_error',
  TIMEOUT = 'timeout',
  RATE_LIMIT = 'rate_limit',
  QUOTA_EXCEEDED = 'quota_exceeded',
  INVALID_REQUEST = 'invalid_request',
  UNKNOWN = 'unknown'
}

/**
 * AI错误接口
 */
export interface AIError {
  code: AIErrorCode
  message: string
  details?: any
}

/**
 * AI配置（用户可配置）
 */
export interface AIConfig {
  apiKey: string
  apiBaseUrl?: string          // API端点地址，默认OpenAI
  model: string
  temperature: number
  maxTokens: number
}

/**
 * 预设的AI服务提供商
 */
export const AI_PROVIDERS = {
  OPENAI: {
    name: 'OpenAI',
    baseUrl: 'https://api.openai.com/v1',
    models: ['gpt-3.5-turbo', 'gpt-4', 'gpt-4-turbo']
  },
  SILICONFLOW: {
    name: 'SiliconFlow (硅基流动)',
    baseUrl: 'https://api.siliconflow.cn/v1',
    models: [
      'Qwen/Qwen2.5-7B-Instruct',
      'THUDM/glm-4-9b-chat',
      'meta-llama/Llama-3.1-8B-Instruct',
      'internlm/internlm2_5-7b-chat'
    ]
  },
  CUSTOM: {
    name: '自定义',
    baseUrl: '',
    models: []
  }
} as const

export type AIProviderType = keyof typeof AI_PROVIDERS

/**
 * AI角色系统类型定义
 */

/**
 * 角色分类枚举
 */
export enum RoleCategory {
  JOURNALISM = 'journalism',      // 新闻记者
  ACADEMIC = 'academic',          // 学术研究
  MARKETING = 'marketing',        // 营销文案
  CREATIVE = 'creative',          // 创意写作
  BUSINESS = 'business',          // 商务写作
  PERSONAL = 'personal'           // 个人博客
}

/**
 * 角色配置接口
 */
export interface AIRole {
  id: string                    // 唯一标识
  name: string                  // 角色名称（如"新闻记者"）
  description: string           // 角色描述
  avatar?: string               // 角色头像
  systemPrompt: string          // System Prompt模板
  category: RoleCategory        // 角色分类
  isBuiltIn: boolean           // 是否为预设角色
  tags: string[]               // 标签（如"新闻", "客观", "严谨"）
  settings: {
    tone: string               // 语气（正式/轻松/专业等）
    style: string              // 风格描述
    targetAudience: string     // 目标读者
    writingLength: string      // 偏好文章长度
    temperature: number        // AI创造性参数
  }
  createdAt: Date
  updatedAt: Date
}

/**
 * 角色应用上下文
 */
export interface RoleContext {
  roleId: string                // 应用的角色ID
  scope: 'document' | 'selection'  // 应用范围
  selectionRange?: {            // 选中文本范围（scope为selection时）
    start: number
    end: number
  }
}

/**
 * 创建角色请求
 */
export interface CreateRoleRequest {
  name: string
  description: string
  avatar?: string
  systemPrompt: string
  category: RoleCategory
  tags: string[]
  settings: AIRole['settings']
}

/**
 * 更新角色请求
 */
export interface UpdateRoleRequest {
  name?: string
  description?: string
  avatar?: string
  systemPrompt?: string
  category?: RoleCategory
  tags?: string[]
  settings?: Partial<AIRole['settings']>
}

/**
 * 基于角色的生成请求
 */
export interface RoleBasedGenerationRequest {
  roleId: string
  prompt: string
  context?: string
  maxTokens?: number
  temperature?: number  // 会覆盖角色默认temperature
}

/**
 * 基于角色的改写请求
 */
export interface RoleBasedRewriteRequest {
  roleId: string
  text: string
  rewriteType: 'polish' | 'expand' | 'compress' | 'restyle'
  context?: string
  maxTokens?: number
}

/**
 * 角色风格分析结果
 */
export interface RoleStyleAnalysis {
  styleMatch: number        // 风格匹配度 0-1
  suggestions: string[]     // 风格改进建议
}

/**
 * Prompt模板接口
 */
export interface PromptTemplate {
  template: string              // 包含变量占位符的模板
  variables: {                  // 可用变量
    [key: string]: any
  }
}

/**
 * 角色存储键定义
 */
export const ROLE_STORAGE_KEYS = {
  ROLES: 'rmzf:ai:roles',           // 自定义角色列表
  CURRENT_ROLE: 'rmzf:ai:current_role',  // 当前选中角色
  ROLE_SETTINGS: 'rmzf:ai:role_settings'  // 角色应用设置
} as const
